﻿Public Class CComplejo
    Private parteReal As Double
    Private parteImaginaria As Double

    Public Shared Function DoubleToComplex(ByVal numero As Double) As CComplejo
        Return New CComplejo(numero, 0)
    End Function

    Public Shared Function IntegerToComplex(ByVal numero As Integer) As CComplejo
        Return New CComplejo(numero, 0)
    End Function

    Public Shared Operator =(ByVal num1 As CComplejo, ByVal num2 As CComplejo) As Boolean
        Dim valor As Boolean
        If ((num1.Real = num2.Real) And (num1.Imaginario = num2.Imaginario)) Then
            valor = True
        End If
        Return valor
    End Operator

    Public Shared Operator <>(ByVal num1 As CComplejo, ByVal num2 As CComplejo) As Boolean
        Dim valor As Boolean
        If ((num1.Real <> num2.Real) Or (num1.Imaginario <> num2.Imaginario)) Then
            valor = True
        End If
        Return valor
    End Operator

    Public Sub New()
        parteReal = 0
        parteImaginaria = 0
    End Sub

    Public Sub New(ByVal parteReal As Double, ByVal parteImaginaria As Double)
        Me.parteReal = parteReal
        Me.parteImaginaria = parteImaginaria
    End Sub

    Public Property Real() As Double
        Get
            Return Me.parteReal
        End Get
        Set(ByVal parteReal As Double)
            Me.parteReal = parteReal
        End Set
    End Property

    Public Property Imaginario() As Double
        Get
            Return Me.parteImaginaria
        End Get
        Set(ByVal parteImaginaria As Double)
            Me.parteImaginaria = parteImaginaria
        End Set
    End Property

    Shared Function Suma(ByVal complejo1 As CComplejo, ByVal complejo2 As CComplejo) As CComplejo
        Return New CComplejo(complejo1.Real + complejo2.Real, complejo1.Imaginario + complejo2.Imaginario)
    End Function

    Shared Function Resta(ByVal complejo1 As CComplejo, ByVal complejo2 As CComplejo) As CComplejo
        Return New CComplejo(complejo1.Real - complejo2.Real, complejo1.Imaginario - complejo2.Imaginario)
    End Function

    Shared Function Multiplicacion(ByVal complejo1 As CComplejo, ByVal complejo2 As CComplejo) As CComplejo
        Return New CComplejo(complejo1.Real * complejo2.Real - complejo1.Imaginario * complejo2.Imaginario, complejo1.Real * complejo2.Imaginario + complejo1.Imaginario * complejo2.Real)
    End Function

    Shared Function Modulo(ByVal complejo As CComplejo) As Double
        Return Math.Sqrt(Math.Pow(complejo.Real, 2) + Math.Pow(complejo.Imaginario, 2))
    End Function

    Shared Function Angulo(ByVal complejo As CComplejo) As Double
        Return Math.Atan(complejo.Imaginario / complejo.Real)
    End Function

    Shared Function Conjugado(ByVal complejo As CComplejo) As CComplejo
        complejo.Imaginario = -1 * complejo.Imaginario
        Return complejo
    End Function

    Shared Function Division(ByVal complejo1 As CComplejo, ByVal complejo2 As CComplejo) As CComplejo
        Dim temp As New CComplejo
        temp = CComplejo.Multiplicacion(complejo1, CComplejo.Conjugado(complejo2))
        temp.Real = temp.Real / CComplejo.Modulo(complejo2)
        temp.Imaginario = temp.Imaginario / CComplejo.Modulo(complejo2)
        Return temp
    End Function
End Class
